package br.com.azservicos.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Reflexao {

    private static final Logger LOG = Logger.getLogger(Reflexao.class.getName());

    public static Object obterId(Object entidade) {
        try {
//É criado um objeto do tipo Method que irá recuperar o metodo especificado ()
//da entidade passada como argumento.
    Method getId = entidade.getClass().getMethod("getId", new Class[0]);
//Invoke verifica se o método passado para o getId existe na entidade passada
// como argumento. Feito isso, esse método é retornado aqui.    
    return getId.invoke(entidade, new Object[0]);
        } catch (NoSuchMethodException | SecurityException |IllegalArgumentException | InvocationTargetException |IllegalAccessException ex ) {
        LOG.log(Level.SEVERE, "Erro de reflexão, não foi possivel acessar o método getId", ex);
            return null;
        }
    }
}
